package main

import "fmt"

// 数组是值类型
// [10]int 和 [20]int 是不同的类型
// 调用func f(arr [10]int) 会拷贝数组
func printArray(arr [5]int) {
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

// 切片  slice可以向后扩展，但不可以向前扩展
func slice () {
	arr := [...]int{0, 1, 2,3,4,5,6,7,8,9}
	fmt.Println("arr[2:6] = ", arr[2:6])
	fmt.Println("arr[:6] = ", arr[:6])
	fmt.Println("arr[2:] = ", arr[2:])
	fmt.Println("arr[:] = ", arr[:])

	// s1[i]不可以超越len(s1), 向后扩展不可以超越底层数组cap(s1)
	s1 := arr[2:6]
	fmt.Printf("s1 = %v, len(s1) = %d, cap(s1) = %d \n ",s1, len(s1), cap(s1))
	s2 := append(s1,1111)
	fmt.Println("s2 = ", s2)

}


func main () {
	var arr1 [5]int
	arr2 := [3]int{1, 2, 3}
	arr3 := [...]int{1, 2, 3}
	var grid [4][5]bool

	fmt.Println(arr1, arr2, arr3, grid)

	for i := 0; i < len(arr3); i++ {
		fmt.Println(arr3[i])
	}

	for i, v := range arr3 {
		fmt.Println(i, v)
	}

	for _, v := range arr3 {
		fmt.Println(v)
	}

	printArray(arr1)
	slice()
}